#ifndef QUEUE_H_
#define QUEUE_H_


#define QUEUE_SIZE 10


/* class queue */
typedef struct Queue Queue;

struct Queue{
  int buffer[QUEUE_SIZE]; /* where the data things are */
  int head;
  int size;
  int tail;
  int (*ifFull)(Queue* const me);
  int (*isEmpty)(Queue* const me);
  int (*getSize)(Queue* const me);
  void (*insert)(Queue* const me);
  int (*remove)(queue* const me);
};

/* constructors and destructors: */
void Queue_Init(Queue* const me,
                int (*isFullfunction)(Queue* const me),
                int (*isEmptyfunction)(Queue* const me),
                int (*getSizefunction)(Queue* const me),
                void (*insertfunction)(Queue* const me),
                int (*removefunction)(Queue* const me) );

void Queue_Cleanup(Queue* const me);

/* operations */
int Queue_isFull(Queue* const me);
int Queue_isEmpty(Queue* const me);
int Queue_getSize(Queue* const me);
int Queue_insert(Queue* const me);
int Queue_remove(Queue* const me);

Queue * Queue_Create(void);
void Queue_Destory(Queue* const me);


#endif /* QUEUE_H_ */
